class Person:  # 其实就是先创建一个对象空间，并保存，下次在创建的时候就使用上一次创建的对象空间
    __instance = None

    # 重写__new__方法
    def __new__(cls):  # 在init前执行
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)  # 把第一次创建的地址给__instance

            return cls.__instance
        else:
            return cls.__instance


# 执行过程：就是先创建一个对象空间p,然后进入new方法中,把开辟的地址p,给cls.__instance，并返回了
# 第二次创建的p2，进入new后__instance它不是为空的，所以就直接else 返回第一次创建的地址。这样就形成了 永远就用同一个地址
p = Person()
p1 = Person()
print(p, p1)

"""
object.__new__(cls):创建新地址
"""
